home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / amber / amber.lha / Rpc.h < prev    next >
C/C++ Source or Header  |  1991-04-25  |  3KB  |  115 lines

  1. #ifndef _rpc_obj_h
  2. #define _rpc_obj_h
  3.  
  4. #define AmberPrognum  0x4000023
  5. #define AmberVersnum 23
  6. #define AmberRPCCheckin 1
  7. #define AmberRPCCheckout  2
  8. #define AmberRPCSegmentAlloc 3
  9. #define AmberRPCSegmentEntry 4
  10. #define AmberRPCSuicide  5
  11. #define AmberRPCDelete  6
  12. #define AmberRPCMoveD  7
  13.  
  14. #ifndef cc
  15. #include "MoveData.h"
  16. #include "Segment.h"
  17. #include "Thread.h"
  18. #include "Klock.h"
  19. #include <rpc/rpc.h>
  20.  
  21. #define CALL 1
  22. #define CALLWR 2
  23. #define REPLY 3
  24.  
  25. typedef int (*CallBack)(XDR *, void *);
  26.  
  27. typedef struct up{
  28.         CallBack inp;
  29.         void *in;
  30.         int replyid;
  31.         Thread *waiter;
  32. } Upcall;
  33.  
  34. class RpcObj {
  35.         int prognum;
  36.         int versnum;
  37.         int busy;
  38.         int numacked;    // used on master only
  39.         char nodes[64];  //  ditto
  40.         int masterack;   // used on slave only
  41.         Upcall registry[64];
  42.         Klock reglock;
  43.         int ismaster;
  44.         unsigned tid;
  45. // Unix socket based junk
  46.         int  rcv_sock;
  47.         char rcv_buf[1<<13];
  48.         XDR  rcv_xdr;
  49.         unsigned readmask;
  50.  
  51.         void masteracked();
  52.         void nodeacked(int );  //  used on master only
  53.         void inithostrecord(struct amberhost *);
  54.         int makesock();
  55.         int Call(struct  amberhost *,int,CallBack,void*);
  56.         int CallRepl(struct  amberhost *,int,CallBack,void*,
  57.                      CallBack,void*);
  58.         int Reply(struct sockaddr_in *, int, int , CallBack, void *);
  59.         void Register(int tid, Thread *, CallBack, void*);
  60.         void Unregister(int, Upcall* = 0);
  61.         void Block();
  62.         void Decode(int);
  63.         void Prod(int, XDR *);
  64.         Upcall *Locate(int,int);
  65.         void Dispatch(int, int, XDR*, struct sockaddr_in* = 0, int = 0);
  66.         int Setpos(XDR *, int);
  67.         int Getpos(XDR *);
  68.         inline unsigned gettid() { return (++tid != 0) ? tid : ++tid ;}
  69. public:
  70.         RpcObj();
  71.         void Export(int  tn,int prog = AmberPrognum, int vers = AmberVersnum);
  72.         void ShutDown();
  73.         int GetProgNum() { return prognum;}
  74.         int GetVersNum() { return versnum;}
  75.         int Busy() { return busy;}
  76.         void WaitForClientCheckin(int);
  77.         void WaitForMasterAck();
  78.         int CheckIn(struct amberhost *, int);
  79.         int SegmentAlloc(int, int, int, int *, int *);
  80.         int GetSegmentEntry(int, int *,SegmentMode *);
  81.         int Delete(int, Object*);
  82.         int MoveData(int, RPCDatum *, Object*,  ArrivalFunc, int*);
  83.         void Recv(int);
  84. };
  85.  
  86. extern int pmap_set(u_long,u_long,u_long,u_short);
  87. extern int pmap_unset(u_long,u_long);
  88. extern u_short pmap_getport(struct sockaddr_in *,u_long, u_long, u_long);
  89. extern int select(int,int*,int*,int*,struct timeval*);
  90. extern int bind(int, struct sockaddr *, int);
  91. extern int recvfrom(int, char *, int, int, struct sockaddr *, int *);
  92. extern int sendto(int, char *, int,int, struct sockaddr *, int);
  93. extern int getsockname(int, struct sockaddr *, int *);
  94. extern int socket(int , int, int);
  95. extern int bzero(char *, int);
  96.  
  97. extern RpcObj *rpc;
  98. #endif !cc
  99.  
  100. struct seg_alloc_struct{
  101.         int count;
  102.         int mode;
  103.         int nodenum;
  104.         int firstindex;
  105.         int status;
  106. };
  107.  
  108. struct seg_entry_struct{
  109.         int index;
  110.         int owner;
  111.         int mode;
  112. };
  113.  
  114. #endif _rpc_obj_h
  115.